/* La clase Gui es la clase principal de la interfaz grafica. Contiene a todos los objetos
 * que cumplen un rol en la vista. Es la encargada de informarle al modelo las interacciones
 * con el usuario, y de actualizar periodicamente la vista. Hereda de Thread, y justamente en
 * este hilo es donde corre el loop de Gtk.
 */
#ifndef GUI_H_
#define GUI_H_

#include <gtkmm.h>
#include <string>
#include <map>
#include <iostream>

#include "Thread.h"
#include "VentanaPrincipal.h"
#include "ColumnasTorrentGui.h"
#include "TorrentGui.h"
#include "Mutex.h"

class Modelo;

using namespace std;
using namespace Gtk;

class Gui: public Thread {

friend class TorrentGui;
friend class VentanaPrincipal;

private:

	Modelo* modelo;

	Main loopEventos;
	VentanaPrincipal* ventana;

	map <string,TorrentGui*> torrents;

	// información sobre la lista de torrents
	Glib::RefPtr<ListStore> modeloTorrents;
	ColumnasTorrentGui columnas;

	TreeModel::iterator getFilaSeleccionada();
	TorrentGui* agregarTorrent(Glib::ustring id);

	void pausar();
	void agregar();
	void remover();
	void empezar();
	void verPropiedades();
	void cantMaxPeers(const string& idTorrent, int maxCantPeers);

	bool actualizar();

public:
	Gui(int argc, char *argv[], Modelo* modelo);
	virtual ~Gui();

	TorrentGui* getTorrent(const string& id);

	virtual void* run();
	virtual void stop();
};

#endif /* GUI_H_ */
